package com.superman.thread.func;

import cn.hutool.core.exceptions.ExceptionUtil;

import java.io.Serializable;

/**
 * 有参+无返回值 函数对象
 *
 * @param <P> 参数类型
 * @Author: superman
 * @Date: 2024/5/22 14:40
 */
@FunctionalInterface
public interface TakeHavingReturnNothing<P> extends Serializable {
    /**
     * 执行函数
     *
     * @param p 参数
     * @throws Exception 自定义异常
     */
    void call(P p) throws Exception;

    /**
     * 执行函数，异常包装为RuntimeException
     *
     * @param p 参数
     */
    default void callWithRuntimeException(P p) {
        try {
            call(p);
        } catch (Exception e) {
            throw ExceptionUtil.wrapRuntime(e);
        }
    }
}
